package fichiers;

import Composite.RacinePicasial;
import Composite.Dossier;
import Visitables.Visiteur_ConstructionPicasial;
import java.io.*;
import java.util.*;
import support.*;

public class GestionnaireDeDossier extends Observable implements Serializable {

    private ArrayList fichiersAlways;

    public GestionnaireDeDossier() {

        fichiersAlways = new ArrayList();

    }
    
    public void charger(){

        Iterator it=this.fichiersAlways.iterator();
        while(it.hasNext()){

            this.setChanged();
            this.notifyObservers(it.next());
        }
    }

    public ArrayList getFichiersAlways() {

        return this.fichiersAlways;
    }

    public void ajouterFichiersAlways(Dossier nouveau) {

        this.fichiersAlways.add(nouveau);
        this.setChanged();
        this.notifyObservers(nouveau);
        this.clearChanged();

    }

    public void supprimerFichiersAlways(Dossier ancien) {

        this.fichiersAlways.remove(ancien);
        this.setChanged();
        this.notifyObservers(ancien);
        this.clearChanged();

    }

    public boolean estUnFichierAlways(Dossier d) {

        String pathd = d.getFichierCourant().getAbsolutePath();

        Iterator it = this.fichiersAlways.iterator();
        while (it.hasNext()) {

            Dossier suiv = (Dossier) it.next();
            if (pathd.equalsIgnoreCase(suiv.getFichierCourant().getAbsolutePath())) {

                return true;
            }
        }

        return false;

    }
    
     public void supprimerSousFichierAlways(Dossier d){
        
        ArrayList temp=new ArrayList(this.fichiersAlways);
        Iterator it=temp.iterator();
        while(it.hasNext()){
            
            Dossier suiv=(Dossier)it.next();
            if(suiv.getFichierCourant().getAbsolutePath().startsWith(d.getFichierCourant().getAbsolutePath())){
                
                RacinePicasial.getRacine().removeChild(suiv);
                this.supprimerFichiersAlways(suiv);
                
            }
            
        }
    }


    public void mettreAJour(Dossier courant) {


        if (courant.getVerification() == true) {

            this.supprimerSousFichierAlways(courant);
            
                
            Dossier picasial = null; 
            
            if(courant.getPere().getFichierCourant()!=null){
                
            picasial = (Dossier) RacinePicasial.getRacine().getElement(courant.getPere().getFichierCourant().getAbsolutePath());                
            
            }

            
            if (picasial != null) {

                Dossier nouveau = courant.getCopie(picasial);
                int index = picasial.getIndex(nouveau);
                picasial.addChild(nouveau, index);
                Visiteur_ConstructionPicasial vis = new Visiteur_ConstructionPicasial();
                nouveau.accept(vis);
                

            } else {

                Dossier nouveau = courant.getCopie(RacinePicasial.getRacine());

                int index = RacinePicasial.getRacine().getIndex(nouveau);
                RacinePicasial.getRacine().addChild(nouveau, index);
                Visiteur_ConstructionPicasial vis = new Visiteur_ConstructionPicasial();
                nouveau.accept(vis);
                this.ajouterFichiersAlways(nouveau);

            }


        } else {

            
            Dossier picasial = (Dossier) RacinePicasial.getRacine().getElement(courant.getFichierCourant().getAbsolutePath());
            picasial.getPere().removeChild(picasial);
            picasial.setPere(null);
            if (this.estUnFichierAlways(courant)) {
                
              RacinePicasial.getRacine().removeChild(picasial);
              this.supprimerFichiersAlways(picasial);
            }


        }



    }
}
